package birdsong.server;


import java.util.LinkedList;



import birdsong.comm.ServerComm;
import birdsong.comm.ServerSideMessage;

/**
 * ServerTester is one class that tests the server to see if he using correctly the implementation of serverComm
 * 
 * @author Telesforo
 *
 */
public class ServerTester implements ServerComm {


	LinkedList<ServerSideMessage> listaMensagem = new LinkedList<ServerSideMessage>();



/**
 * Add a new message to the list of messages
 * @param message  message to add to he list
 */
	public void addMessage(ServerSideMessage message){

		listaMensagem.add(message);

	}


	@Override
	public ServerSideMessage getNextMessage() {

		ServerSideMessage mensagem = listaMensagem.removeFirst();
		return  mensagem;
	}


	@Override
	public boolean hasNextMessage() {

		if(!listaMensagem.isEmpty()){
			return true;
		}return false;
	}

	@Override
	public void sendBirdsongMessage(String fromNicename, String toNickname,
			String birdsongMessage) {

		System.out.println("TESTER --> From: " + fromNicename + " -- to: " + toNickname + ". Message: " + birdsongMessage);
	}


	@Override
	public void sendNewFollower(String toNickname, String newFollower) {

		System.out.println("TESTER --> Send New Follower, to: " + toNickname + " from " + newFollower );

	}

	@Override
	public void sendNewUnfollow(String toNickname, String unfollower) {

		System.out.println("TESTER --> Send New UnFollower, para: " + toNickname + " de " + unfollower );
	}

	@Override
	public void sendError(String toNickname, String error) {

		System.out.println("TESTER --> Sending Error: from: " + toNickname + ", Error: "+ error);

	}

	@Override
	public void sendClientConnected(String toNickname, String connectedNickname) {

		System.out.println("TESTER --> Send Client Connected, to: " + toNickname + " from " + connectedNickname );

	}

	@Override
	public void sendClientDisconnected(String toNickname,
			String disconnectedNickname) {

		System.out.println("TESTER --> Send Client DisConnected, to: " + toNickname + " from " + disconnectedNickname );

	}

	@Override
	public boolean clientIsConnected(String nickname) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public void disconnectClient(String nickname) {
		// TODO Auto-generated method stub

	}


	@Override
	public void start() {


		listaMensagem.add(new mensagem(ServerSideMessage.Type.CLIENT_CONNECTED, "", "UserA"));
		listaMensagem.add(new mensagem(ServerSideMessage.Type.CLIENT_CONNECTED, "", "UserB"));
		listaMensagem.add(new mensagem(ServerSideMessage.Type.CLIENT_CONNECTED, "", "UserC"));
		listaMensagem.add(new mensagem(ServerSideMessage.Type.CLIENT_CONNECTED, "", "UserD"));
		listaMensagem.add(new mensagem(ServerSideMessage.Type.CLIENT_CONNECTED, "", "UserE"));
		listaMensagem.add(new mensagem(ServerSideMessage.Type.CLIENT_CONNECTED, "", "UserF"));
		listaMensagem.add(new mensagem(ServerSideMessage.Type.CLIENT_CONNECTED, "", "UserG"));


		listaMensagem.add(new mensagem(ServerSideMessage.Type.FOLLOW,"UserB","UserA"));
		listaMensagem.add(new mensagem(ServerSideMessage.Type.FOLLOW,"UserC","UserA"));
		listaMensagem.add(new mensagem(ServerSideMessage.Type.FOLLOW,"UserD","UserA"));
		listaMensagem.add(new mensagem(ServerSideMessage.Type.FOLLOW,"UserC","UserB"));
		listaMensagem.add(new mensagem(ServerSideMessage.Type.FOLLOW,"UserC","UserF"));
		listaMensagem.add(new mensagem(ServerSideMessage.Type.FOLLOW,"UserC","UserD"));



		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {

			e.printStackTrace();
		}


		listaMensagem.add(new mensagem(ServerSideMessage.Type.BIRDSONG_MESSAGE, "mensagem de teste enviada do UserA", "UserA"));
		listaMensagem.add(new mensagem(ServerSideMessage.Type.BIRDSONG_MESSAGE, "mensagem de teste enviada do UserC", "UserC"));

		listaMensagem.add(new mensagem(ServerSideMessage.Type.UNFOLLOW, "UserC", "UserA"));
		listaMensagem.add(new mensagem(ServerSideMessage.Type.UNFOLLOW, "UserD", "UserA"));


		System.out.println("DESCONECTAR UTILIZADOR");
		listaMensagem.add(new mensagem(ServerSideMessage.Type.CLIENT_DISCONNECTED, "", "UserA"));
		listaMensagem.add(new mensagem(ServerSideMessage.Type.CLIENT_DISCONNECTED, "", "UserD"));
		listaMensagem.add(new mensagem(ServerSideMessage.Type.CLIENT_DISCONNECTED, "", "UserF"));
		listaMensagem.add(new mensagem(ServerSideMessage.Type.CLIENT_DISCONNECTED, "", "UserB"));
		listaMensagem.add(new mensagem(ServerSideMessage.Type.CLIENT_DISCONNECTED, "", "UserC"));
		listaMensagem.add(new mensagem(ServerSideMessage.Type.CLIENT_DISCONNECTED, "", "UserE"));
		listaMensagem.add(new mensagem(ServerSideMessage.Type.CLIENT_DISCONNECTED, "", "UserG"));


	}
}
